type AwaitToReturnType<T> = Promise<[null, T] | [any, null]>;

/**
 * 传入一个普通Promise对象，返回一个只有成功状态的Promise对象，成功的返回为 [Error, Res]
 * Error存在时，res为null；反之，Error为null，则res存在
 * @param prm Promise对象
 * @returns 返回一个只有成功状态的Promise
 * @example
 * // 使用方法一
 * awaitTo(axios.get("/get"))
 *  .then(([err, res]) => {
 *    if(err) console.log('err', Err);
 *    console.log(res);
 *  });
 * // 使用方法二
 * async function test(){
 *  const [err, res] = await awaitTo(axios('/get'));
 *  if(err) return null;
 *  return res;
 * }
 *
 */
export default function awaitTo<T>(prm: Promise<T>): AwaitToReturnType<T> {
  return prm
    .then((res) => Promise.resolve([null, res] as [null, T]))
    .catch((err) => Promise.resolve([err, null] as [any, null]));
}
